/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import database.DBConnection;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import util.PropertiesManager;

/**
 *
 * @author rosana
 */
public class ProfissionalDAO implements OperacoesDAO {
    
      private Connection conexao;

    public ProfissionalDAO() throws ClassNotFoundException, SQLException {
        conexao = DBConnection.getConnection();

    } 
    public Profissional pesquisarLogin(String chave) throws SQLException {
        Profissional user = null;
        String SQL = buscaSQL("selectByLogin.Profissional");
        PreparedStatement st = conexao.prepareStatement(SQL);
        st.setString(1, chave);
        ResultSet res = st.executeQuery();
        while (res.next()) {
            int idPessoa = res.getInt(1);
            int crm = res.getInt(2);
            String emailClinica = res.getString(3);
            int numCarteira = res.getInt(4);
             String a = res.getString(5).substring(0, 4);
            String b = res.getString(5).substring(5, 7);
            String c = res.getString(5).substring(8, 10);
            String DataAdmissao = (c+"/"+b+"/"+a);
            int idProfissao = res.getInt(6);
            int idCargo = res.getInt(7);
            String nome = res.getString(9);
            String cpf = res.getString(10);
            String rg = res.getString(11);
            String p = res.getString(12).substring(0, 4);
            String s = res.getString(12).substring(5, 7);
            String t = res.getString(12).substring(8, 10);
            String DataNasc = (t+"/"+s+"/"+p);
            String Endereco = res.getString(13);
            String Telefone = res.getString(14);
            String Celular = res.getString(15);
            String Email = res.getString(16);
            String nomeprofissao = res.getString(17);
            Profissao profissao  = new Profissao(idProfissao, nomeprofissao);
            Cargo cargo  = new Cargo(idCargo,null);
            Pessoa pes  = new Pessoa(idPessoa, nome, cpf, rg, DataNasc, Endereco, Telefone, Celular, Email);
            user  = new Profissional(pes, crm, emailClinica, numCarteira, profissao, DataAdmissao, nome, cpf, rg, DataNasc, Endereco, Telefone, Celular, Email, cargo);
        }
        return user;
    }

    public Profissional pesquisarById(String chave) throws SQLException {
        Profissional user = null;
        String SQL = buscaSQL("selectById.Profissional");
        PreparedStatement st = conexao.prepareStatement(SQL);
        st.setString(1, chave);
        ResultSet res = st.executeQuery();
        while (res.next()) {
            int idPessoa = res.getInt(1);
            String nome = res.getString(2);
            String cpf = res.getString(3);
            String rg = res.getString(4);
             String a = res.getString(5).substring(0, 4);
            String b = res.getString(5).substring(5, 7);
            String c = res.getString(5).substring(8, 10);
            String datanasc = (c+"/"+b+"/"+a);
            String endereco = res.getString(6);
            String telefone = res.getString(7);
            String celular = res.getString(8);
            String email = res.getString(9);
            int numcrm = res.getInt(11);
            String emailClinica = res.getString(12);
            int numCarteira = res.getInt(13);
              String y = res.getString(14).substring(0, 4);
            String m = res.getString(14).substring(5, 7);
            String d = res.getString(14).substring(8, 10);
            String dataadmissao = (d+"/"+m+"/"+y);
            int idProfissao  = res.getInt(15);
            String NomeProfissao = res.getString(16);
            Profissao profc = new Profissao(idProfissao, NomeProfissao);
            Pessoa pes = new Pessoa(idPessoa, nome, cpf, rg, datanasc, endereco, telefone, celular, email);
            user = new Profissional(pes, numcrm, emailClinica, numCarteira, profc, dataadmissao, nome, cpf, rg, datanasc, endereco, telefone, celular, email, null);
        }
        return user;
    }
   
    @Override
    public void inserir(Object obj) throws SQLException {
        String SQL = buscaSQL("insert.Profissional");
        if (obj instanceof Profissional) {
            Profissional prof = (Profissional) obj;
            PreparedStatement st = conexao.prepareStatement(SQL);
            //st.setInt(1, prof.getPessoa().getIdPessoa());
            st.setInt(1, prof.getNumCRM());
            st.setString(2, prof.getEmailClinica());
            st.setInt(3, prof.getNumCarteira());
            st.setString(4, prof.getDataAdmissao());
            st.setInt(5, prof.getProfissao().getIdProfissao());
            st.setInt(6, prof.getCargo().getIdCargo());
            st.execute();
            
        }
    }

    @Override
    public boolean excluir(Object obj) throws SQLException {
        Integer num = (Integer) obj;
        int id = num.intValue();
        String sql = (String) buscaSQL("delete.Profissional");
        PreparedStatement stmt = conexao.prepareStatement(sql);
        stmt.setInt(1, id);
        stmt.execute();
        stmt.close();
        return true;
    }

   
  @Override
    public void editar(Object obj) throws SQLException {
        Profissional prof = (Profissional) obj;
        String sql = (String) buscaSQL("Update.Profissional");
        PreparedStatement stmt = conexao.prepareStatement(sql);
        stmt.setInt(1, prof.getNumCRM());
        stmt.setString(2, prof.getEmailClinica());
        stmt.setInt(3, prof.getNumCarteira());
        stmt.setString(4, prof.getDataAdmissao());
        stmt.setInt(5, prof.getProfissao().getIdProfissao());
        stmt.setInt(6, prof.getCargo().getIdCargo());
        stmt.setInt(7, prof.getPessoa().getIdPessoa());
        stmt.execute();
        stmt.close();
    }
    public ArrayList pesquisar() throws SQLException {
        ArrayList retorno = new ArrayList();
        String SQL = buscaSQL("selectComboProfissionalAgenda");
        Statement st = conexao.createStatement();
        ResultSet res = st.executeQuery(SQL);
        while (res.next()) {
            int idPessoa = res.getInt(1);
            String nome = res.getString(2);
            Pessoa pes = new Pessoa(idPessoa, nome, null, null, null, null, null, null, null);
            Profissional prof = new Profissional(pes, 0, null, 0, null, null, null, null, null, null, null, null, null, null,null);
            retorno.add(prof);
        }
        return retorno;
    }

    public ArrayList pesquisarProfissionais() throws SQLException {
        ArrayList retorno = new ArrayList();
        String SQL = buscaSQL("selectPesquisaProfissional");
        Statement st = conexao.createStatement();
        ResultSet res = st.executeQuery(SQL);
        while (res.next()) {
            int idPessoa = res.getInt(1);
            String nome = res.getString(2);
            String cpf = res.getString(3);
            String rg = res.getString(4);
            String a = res.getString(5).substring(0, 4);
            String b = res.getString(5).substring(5, 7);
            String c = res.getString(5).substring(8, 10);
            String datanasc = (c+"/"+b+"/"+a);
            String endereco = res.getString(6);
            String telefone = res.getString(7);
            String celular = res.getString(8);
            String email = res.getString(9);
            int numcrm = res.getInt(11);
            String emailClinica = res.getString(12);
            int numCarteira = res.getInt(13);
            String y = res.getString(14).substring(0, 4);
            String m = res.getString(14).substring(5, 7);
            String d = res.getString(14).substring(8, 10);
            String dataadmissao = (d+"/"+m+"/"+y);
            int idProfissao  = res.getInt(15);
            String NomeProfissao = res.getString(16);
            Profissao profc = new Profissao(idProfissao, NomeProfissao);
            Pessoa pes = new Pessoa(idPessoa, nome, cpf, rg, datanasc, endereco, telefone, celular, email);
            Profissional prof = new Profissional(pes, numcrm, emailClinica, numCarteira, profc, dataadmissao, nome, cpf, rg, datanasc, endereco, telefone, celular, email, null);
            retorno.add(prof);
        }
        return retorno;
    }
        private String buscaSQL(String chave) {
        String sql = null;
        try {
            PropertiesManager pm = new PropertiesManager("sql.properties");
            HashMap dados = pm.readPropertiesFile();
            sql = (String) dados.get(chave);
        } catch (IOException ex) {
            Logger.getLogger(ProfissionalDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return sql;
    }
    
}
